#include <stdio.h>

// 计算 base^m（纯整数循环实现，无浮点数误差）
long long pow_int(int base, int m) {
    long long result = 1;
    for (int i = 0; i < m; i++) {
        result *= base;
    }
    return result;
}

/**
 * 分段乘法函数：(x1*base^m + x0) * (y1*base^m + y0)
 * @param x0: 第一个数低段
 * @param x1: 第一个数高段
 * @param y0: 第二个数低段
 * @param y1: 第二个数高段
 * @param base: 基数（如10）
 * @param m: 分段长度（如2，即按base^2分段）
 * @return: 乘积结果（long long类型避免溢出）
 */
long long mul(int x0, int x1, int y0, int y1, int base, int m) {
    // 计算三个中间乘积（用long long避免int溢出）
    long long p0 = (long long)x0 * y0;
    long long p1 = (long long)x1 * y1;
    long long p2 = (long long)(x0 + x1) * (y0 + y1) - p1 - p0;

    // 计算分段单位 p = base^m，p_square = p^2
    long long p = pow_int(base, m);
    long long p_square = p * p;

    // 组合最终结果：p1*p² + p2*p + p0
    return p1 * p_square + p2 * p + p0;
}

int main() {
    // 测试用例：对应 Python 的 mul(34, 12, 32, 14, 10, 2)
    // 实际计算：(12*10² + 34) * (14*10² + 32) = 1234 * 1432
    int x0 = 34, x1 = 12;
    int y0 = 32, y1 = 14;
    int base = 10, m = 2;

    long long result = mul(x0, x1, y0, y1, base, m);
    printf("1234 * 1432 = %lld\n", result);  // 预期输出：1767088

    return 0;
}